﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using InterfaceXAML.Common;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using System.Reflection;
using InterfaceXAML.ExaPlanningService;

// The Basic Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234237

namespace InterfaceXAML.ProjectPages
{
    /// <summary>
    /// A basic page that provides characteristics common to most applications.
    /// </summary>
    public sealed partial class EditProjectPage : InterfaceXAML.Common.LayoutAwarePage
    {
        public EditProjectPage()
        {
            this.InitializeComponent();
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            var reference = e.Parameter as string;
            // Appel au webService pour récupérer les données du projet
            Init(reference);
        }

        private async void Init(string reference)
        {
            var states = await App.ExaPlanningServiceClient.GetAllStateAsync();
            var projet = await App.ExaPlanningServiceClient.GetProjectAsync(reference);

            DataContext = new { States = states };

            Reference.Text = projet.Reference;
            Name.Document.SetText(Windows.UI.Text.TextSetOptions.Unhide, projet.Name);
            Client.Document.SetText(Windows.UI.Text.TextSetOptions.Unhide, projet.Client);
            BeginDate.SetDate(projet.BeginDate);
            EndDate.SetDate(projet.EndDate);
            ColorCode.SetCodeColor(projet.ColorCode);
            State.SelectedIndex = projet.StateID - 1;
        }

        /// <summary>
        /// Populates the page with content passed during navigation.  Any saved state is also
        /// provided when recreating a page from a prior session.
        /// </summary>
        /// <param name="navigationParameter">The parameter value passed to
        /// <see cref="Frame.Navigate(Type, Object)"/> when this page was initially requested.
        /// </param>
        /// <param name="pageState">A dictionary of state preserved by this page during an earlier
        /// session.  This will be null the first time a page is visited.</param>
        protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
        {
        }

        /// <summary>
        /// Preserves state associated with this page in case the application is suspended or the
        /// page is discarded from the navigation cache.  Values must conform to the serialization
        /// requirements of <see cref="SuspensionManager.SessionState"/>.
        /// </summary>
        /// <param name="pageState">An empty dictionary to be populated with serializable state.</param>
        protected override void SaveState(Dictionary<String, Object> pageState)
        {

        }

        private void EditProject(object sender, RoutedEventArgs args)
        {
            var reference = Reference.Text;
            var name = "";
            var state = ((State.SelectedItem) as State).ID;
            var client = "";
            var debut = BeginDate.GetDate();
            var fin = EndDate.GetDate();
            var color = ColorCode.ColorHex;

            Name.Document.GetText(Windows.UI.Text.TextGetOptions.NoHidden, out name);
            Client.Document.GetText(Windows.UI.Text.TextGetOptions.NoHidden, out client);

            //Vérifier si les champs sont remplis
            Name.BorderBrush = Application.Current.Resources["CorrectField"] as SolidColorBrush;
            Client.BorderBrush = Application.Current.Resources["CorrectField"] as SolidColorBrush;
            BeginDate.DisplayNormal();


            if (name.Equals(String.Empty))
                Name.BorderBrush = Application.Current.Resources["ErrorField"] as SolidColorBrush;

            if (client.Equals(String.Empty))
                Client.BorderBrush = Application.Current.Resources["ErrorField"] as SolidColorBrush;

            if (debut > fin)
                BeginDate.DisplayError();

            if (client.Equals(String.Empty) || name.Equals(String.Empty) || debut > fin)
                return;

            try
            {
                // Appel au WS
                App.ExaPlanningServiceClient.EditProjectAsync(reference, name, debut, fin, state, client, color);
            }
            catch (Exception e)
            {

            }

            if (Frame.CanGoBack)
                Frame.GoBack();
        }
    }
}
